<!DOCTYPE html>
<html lang="zh">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>
        /*
            call()和apply()
                -这俩方法都是函数对象的方法，需要通过函数对象来调用
                -当对函数调用call()和apply()都会调用函数执行
                -在调用call()和apply()可以将一个对象指定为第一个参数
                    此时这个对象将会成为函数执行时的this
                -call()方法可以将实参在对象之后依次传递
                -apply()方法需要将实参封装到一个数组中统一传递


                -this的情况：
                    1.以函数形式调用时，this永远都是window
                    2.以方法形式调用时，this是调用方法的对象
                    3.以构造函数的形式调用时，this是新创建的那个对象
                    4.使用call和apply调用时，this是指定的那个对象

        */
        function fun() {
            alert("我是fun函数");
        }
        //fun();
        //fun.call();
        //fun.apply();

        var person = {
            fullName: function (city, country) {
                return this.firstName + " " + this.lastName + "," + city + "," + country;
            }
        }
        var person1 = {
            firstName: "Bill",
            lastName: "Gates"
        }
        console.log(person.fullName.call(person1, "Seattle", "USA"));



    </script>
</head>

<body>

</body>

</html>